/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import bean.Aula;
import bean.Curso;
import bean.Disciplina;
import bean.Horarios;
import bean.Professor;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 *
 * @author Júnior
 */
public class CadastraHorarioDao {
    
    public List<Curso> listarCursos() {

        EntityManager em = FabricaConexao.getConexao().createEntityManager();
        List<Curso> lista;
        Query query = em.createQuery("select c from Curso c");
        lista = query.getResultList();
        em.close();
        return lista;
    }
    
    public List<String> listarTurmas(int curso) {

        EntityManager em = FabricaConexao.getConexao().createEntityManager();
        List<String> lista;
        Query query = em.createQuery("select distinct d.turma from Disciplina as d where d.curso = "+curso);
       /* query.setParameter("tperiodo", periodo);
        query.setParameter("tturno", turno);*/
        lista = query.getResultList();
        em.close();
        return lista;
    }
   
    public List<Disciplina> listarDisciplinas(int curso, String turma, Professor p) {

        EntityManager em = FabricaConexao.getConexao().createEntityManager();
        List<Disciplina> lista;
        Query query = em.createQuery("select d from Disciplina d inner join d.professores p where d.curso = "+curso+" and d.turma = '"+turma+"' and p.matricula = "+p.getMatricula());
       /* query.setParameter("tperiodo", periodo);
        query.setParameter("tturno", turno);*/
        lista = query.getResultList();
        em.close();
        return lista;
    }
    
    public List<Disciplina> listarDisciplinas(int curso, String turma) {

        EntityManager em = FabricaConexao.getConexao().createEntityManager();
        List<Disciplina> lista;
        Query query = em.createQuery("select d from Disciplina as d where d.curso = "+curso+" and d.turma = '"+turma+"'" );
       /* query.setParameter("tperiodo", periodo);
        query.setParameter("tturno", turno);*/
        lista = query.getResultList();
        em.close();
        return lista;
    }
    
    public List<Horarios> listarHorarios(String turno) {

        EntityManager em = FabricaConexao.getConexao().createEntityManager();
        List<Horarios> lista;
        Query query = em.createQuery("select h from Horarios as h where h.turno = '"+turno+"' order by h.inicio asc");
        lista = query.getResultList();
        em.close();
        return lista;
    }
    
    public void salva(Aula aula){
        EntityManager em = FabricaConexao.getConexao().createEntityManager();

        try {
            em.getTransaction().begin();
            em.persist(aula);
            //JOptionPane.showMessageDialog(null,"Horário cadastrado com sucesso");
            em.getTransaction().commit();

        }/*catch(RollbackException e){
            JOptionPane.showMessageDialog(null, e);
        }*/
        finally {
            em.close();

        }
        
    }
    
    public void remove(int id){
        EntityManager em = FabricaConexao.getConexao().createEntityManager();

        try {
            em.getTransaction().begin();
            int x = em.createQuery("delete from Aula a where a.disciplina = "+id).executeUpdate();
            
            
            //JOptionPane.showMessageDialog(null,"Horário cadastrado com sucesso");
            em.getTransaction().commit();

        } finally {
            em.close();

        }
        
    }
    
    public List<Aula> listarAulas(int curso, String turno, String turma) {

        EntityManager em = FabricaConexao.getConexao().createEntityManager();
        List<Aula> lista;
        Query query = em.createQuery("select a from Aula a inner join a.disciplina d left join a.horario h where d.curso = "+curso+" and  h.turno ='"+turno+"' and d.turma = '"+turma+"'" );
       /* query.setParameter("tperiodo", periodo);
        query.setParameter("tturno", turno);*/
        lista = query.getResultList();
        em.close();
        return lista;
    }
}
